﻿using System;

namespace _7_整数反转 {
    #region  题目
    /*
给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
 示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−2^31,  2^31 − 1]。请根据这个假设，如果反转后整数溢出那么就返回 0。
 */
    #endregion
    class Program {
        static void Main (string[] args) {
            Solution solution = new Solution ();

            Console.WriteLine (solution.Reverse (987654321));
            Console.WriteLine (solution.Reverse (123456789));
            Console.WriteLine (solution.Reverse (-987654321));
            Console.WriteLine (solution.Reverse (-123456789));
        }
    }
    public class Solution {
        public int Reverse (int x) {

            var chars = x.ToString ().ToCharArray ();
            var symnol = chars[0] == '-';
            if (symnol) chars[0] = '\0'; //将字符的第一位转化为\0，\0是一个转义字符
            Array.Reverse (chars); // 反转当前数组
            var result = new string (chars); //将当前数组转化为字符串
            var reversed = long.Parse (result); //将字符串转化为long 长整型
            var ret = reversed > int.MaxValue?0: (int) reversed; // 判断当前结果是否大于整形的最大值
            return symnol? - ret : ret;
        }
    }
}